#pragma once

#include <iostream>
#include <string>
#include <vector>   
#include <ctemplate/template.h>
#include "model_file.hpp"

//将所有的题目数据构建成网页
class View {

    const std::string template_html_path = "/home/dyx/Oline_judge/oj_server/template_html";

    public:
        // 将所有的题目数据构建成网页

        // "all_questions" 是这个字典的内部名称，主要用于调试目的，在实际模板渲染中不会直接使用。
        void Build_All_Question_Html(const std::vector<Question>& questions, std::string *html)
        {
            std::string src_html_path = template_html_path + "/all_questions.html";// 要被渲染的网页

            ctemplate::TemplateDictionary root("all_questions");
            // 创建了一个名为 root 的 TemplateDictionary 对象，它是数据字典的根节点。参数 "all_questions" 是这个字典的内部名称，主要用于调试目的，在实际模板渲染中不会直接使用。
            
            // 形成一个子字典
            for(const auto &question : questions){
                ctemplate::TemplateDictionary *sub = root.AddSectionDictionary("question_list");
                sub->SetValue("number", question.number);
                sub->SetValue("title", question.title);
                sub->SetValue("star", question.star);
            }

            //获取渲染的网页
            ctemplate::Template *_template = ctemplate::Template::GetTemplate(src_html_path, ctemplate::DO_NOT_STRIP);

            //开始渲染网页
            _template->Expand(html, &root);// 这个root字典里面会包含所有的子字典，所以在渲染时，会自动将子字典的数据渲染到网页中。

        }
        
        void Build_One_Question_Html(const Question &question, std::string *html)
        {
            std::string src_html_path = template_html_path + "/one_question.html";// 要被渲染的网页

            ctemplate::TemplateDictionary root("one_question");
            root.SetValue("number", question.number); // 题号
            root.SetValue("title", question.title);     // 题目标题
            root.SetValue("star", question.star);       // 困难系数
            root.SetValue("desc",question.desc);         // 题目描述
            root.SetValue("pre_code",question.code);         // 题目预设给用户在线编辑器的代码

            // 获取渲染的网页
            ctemplate::Template *_template = ctemplate::Template::GetTemplate(src_html_path, ctemplate::DO_NOT_STRIP);

            //开始渲染网页
            _template->Expand(html, &root);
        }


};